#include <iostream>

enum class Switch
{
    On,
    Off
};


template< Switch >
struct value
{
    typedef void type;
};


template<>
struct value< Switch::On >
{
    typedef int type;
};


template<>
struct value< Switch::Off >
{
    typedef char type;
};

template< typename T >
T getSomeRandomValue()
{
    return 10;
}


void print( int i )
{
    std::cout << "Get Integer [[On]]" << std::endl;
}


void print( char c )
{
    std::cout << "Get Character [[Off]]" << std::endl;
}


template< Switch sw >
class SomeClass
{
public:
    SomeClass()
    {
        state = sw;
    }

    void print()
    {
        std::cout << ( sw == Switch::On ? ">> On <<"  : ">> Off <<" )
                  << std::endl;
    }

private:
    Switch state;
};


int main( int argc, char **argv )
{
    SomeClass< Switch::Off > scls;
    scls.print();
}
